# Contributor: Matt Dainty <matt+alpine@bodgit-n-scarper.com>
# Contributor: Dermot Bradley <dermot_bradley@yahoo.com>
# Maintainer: Dermot Bradley <dermot_bradley@yahoo.com>
pkgname=cloud-init
#
# Please do NOT do "drive by" upgrades of this package. I am an active
# participant in upstream cloud-init development and so am well aware of
# when new releases are coming out. If only a few days have passed since an
# upstream release has occurred then it is highly likely that I am *already*
# preparing an Alpine package upgrade.
#
# Similarly I receive advance notification of security fixes/releases from
# upstream and so if a cloud-init security fix has recently been released it
# is high likely I am already aware of it and working on an Alpine package
# update/upgrade.
#
pkgver=23.4
pkgrel=0
pkgdesc="Cloud instance init scripts"
url="https://cloud-init.io"
# Dependant package "cloud-utils-growpart" is not available for
# s390x so disable this arch for this package too.
arch="noarch !s390x"
license="Apache-2.0 OR GPL-3.0-only"
depends="
	blkid
	cloud-utils-growpart
	iproute2-minimal
	python3
	py3-configobj
	py3-jinja2
	py3-jsonpatch
	py3-jsonschema
	py3-requests
	py3-yaml
	shadow
	tzdata
	"
makedepends="py3-setuptools"
checkdepends="
	bash
	coreutils
	grep
	lsblk
	parted
	procps-ng
	py3-netifaces
	py3-passlib
	py3-pyserial
	py3-pytest
	py3-pytest-mock
	py3-responses
	py3-tox
	sfdisk
	sgdisk
	"
subpackages="
	$pkgname-bash-completion
	$pkgname-doc
	$pkgname-logrotate
	$pkgname-pyc
	$pkgname-openrc
	"
source="cloud-init-$pkgver.tar.gz::https://github.com/canonical/cloud-init/archive/refs/tags/$pkgver.tar.gz
	01-oauthlib-remove.patch
	02-disable-irrelevant-modules.patch
	03-hook-hotplug-sh.patch
	04-set-default-datasource-list.patch
	cloud-init-hotplugd
	cloud-init-hotplugd.initd
	cloud-init.logrotate
	interfaces
	setup-cloud-init
	README.Alpine
	"
install="$pkgname.post-install"

# secfixes:
#   23.1.2-r0:
#     - CVE-2023-1786
#   22.2.2-r0:
#     - CVE-2022-2084
#   21.1-r1:
#     - CVE-2021-3429

prepare() {
	default_prepare
}

build() {
	python3 setup.py build
}

check() {
	python3 -m pytest
}

package() {
	python3 setup.py install \
		--prefix=/usr --root="$pkgdir" --init-system=sysvinit_openrc

	install -m644 \
		-D \
		"$srcdir"/interfaces \
		"$pkgdir"/etc/network/interfaces

	install -m755 \
		-D \
		"$srcdir"/cloud-init-hotplugd.initd \
		"$pkgdir"/etc/init.d/cloud-init-hotplugd

	install -m644 \
		-D \
		"$srcdir"/cloud-init.logrotate \
		"$pkgdir"/etc/logrotate.d/cloud-init

	mkdir -p \
		"$pkgdir"/sbin
	install -m755 \
		"$srcdir"/setup-cloud-init \
		"$pkgdir"/sbin/

	mkdir -p \
		"$pkgdir"/usr/sbin
	install -m755 \
		"$srcdir"/cloud-init-hotplugd \
		"$pkgdir"/usr/sbin/

	install -m644 \
		"$srcdir"/README.Alpine \
		"$pkgdir"/usr/share/doc/"$pkgname"/

	# Delete non-Alpine distribution template files
	for distro in \
		arch centos cos debian fedora freebsd gentoo mariner openbsd \
		opensuse opensuse-leap opensuse-microos opensuse-tumbleweed \
		photon redhat rhel sle_hpc sle-micro sles suse ubuntu
	do
		for file in \
			"$pkgdir"/etc/cloud/templates/*."$distro".tmpl
		do
			rm "$file"
		done
	done
	rm "$pkgdir"/etc/cloud/templates/sources.list.*.tmpl

	# Delete non-Alpine os-specific files
	for distro in \
		almalinux amazon arch bsd centos cloudlinux cos debian \
		dragonflybsd eurolinux fedora freebsd gentoo mariner \
		miraclelinux netbsd net_util openeuler openbsd OpenCloudOS \
		openmandriva opensuse opensuse-leap opensuse-microos \
		opensuse-tumbleweed photon rhel rhel_util rocky sle-micro \
		sle_hpc sles suse TencentOS ubuntu virtuozzo
	do
		rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/distros/"$distro".py
		rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/distros/__pycache__/"$distro".*.pyc
	done
	rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/distros/parsers/sys_conf.py
	rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/distros/parsers/__pycache__/sys_conf.*.pyc

	# Delete systemd-related files
	rm \
		"$pkgdir"/etc/cloud/templates/timesyncd.conf.tmpl \
		"$pkgdir"/etc/cloud/templates/systemd.resolved.conf.tmpl
	rm -Rf "$pkgdir"/etc/systemd

	# Delete NetworkManager-related files
	rm -Rf "$pkgdir"/etc/NetworkManager

	# Delete cloud-init modules not relevant to Alpine
	for module in \
		apt_* \
		byobu \
		fan \
		grub_dpkg \
		landscape \
		lxd \
		migrator \
		reset_rmc \
		rh_subscription \
		snap \
		spacewalk \
		ubuntu_advantage \
		ubuntu_autoinstall \
		ubuntu_drivers \
		yum_add_repo \
		zypper_add_repo
	do
		rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/config/cc_$module.py
		rm "$pkgdir"/usr/lib/python3.*/site-packages/cloudinit/config/__pycache__/cc_$module.*.pyc
	done

	# Delete cloud-init docs not relevant to Alpine
	for doc in \
		cloud-config-add-apt-repos.txt \
		cloud-config-apt.txt \
		cloud-config-update-apt.txt \
		cloud-config-yum-repo.txt
	do
		rm "$pkgdir"/usr/share/doc/cloud-init/examples/$doc
	done
}

logrotate() {
	pkgdesc="Cloud instance init scripts (logrotate configuration)"
	depends=""
	install_if="$pkgname=$pkgver-r$pkgrel logrotate"

	amove etc/logrotate.d/cloud-init
}

sha512sums="
e425a957cb38f2be2fcb83693696d0177ad84150f8a55759226d8696344ddd75e33e23a7230c492087784ef96ddd71305bc3462479e2c1a3ed0e704ac0f2d879  cloud-init-23.4.tar.gz
c14ce3b27c55d1c381e27b2898bb73da8a74c53480d496bdfc87318b69fb612678205ab5a686c1ce703ef5c2c7a8529f629c8f908aeff39524d36870a83c1929  01-oauthlib-remove.patch
4e0364ab0411d879a85a422135c72751f08fbda02938218bb551b5b87a097629856e24c2d1141c2c00df5679a23e8808ecbca0b09a7758295fffda432eed2f78  02-disable-irrelevant-modules.patch
463d7ca00f576de75444e86d9b32e1452c824a9f2708b624549e7e003b330c96fbc78d44756efd95d1f954fa0633ce0c0b619e798cdb33b8c86799ee07554834  03-hook-hotplug-sh.patch
8174411925f40f7e0eabb43cfdc273dfd0cf069e3713a3883ed128df7a5cc80b7d19e2643629cf17ae65c3d8e59cc8a074ca5932a6a4fe0e8299fad9ce861686  04-set-default-datasource-list.patch
2d7b80fc248ec18f20c4ed2fbe0f8d6ea85ae57a0ece8ecf8a095cf910c576807c19ab0453c00160b85253df5725cba90abec731cb54f441a509611115519b46  cloud-init-hotplugd
ab44fc51979a5da8569b08ed2f290a6610de6c36cf147af20f30e9224847623d3594c056a1f64c614598ac130e9bec92d566fb901024f806b768a89190c45f59  cloud-init-hotplugd.initd
3c6c5189859633012fd389a8d8370cbd46ddd07f206d61bcf872f12105f340552073cbf28f28096109c158b641de1c8199afcfc7f751166a27d4089355e1dd7d  cloud-init.logrotate
48b25ec4457c2b3772a7d210033551d041749a0d1869818d888030e6df7fd9bbc13a38b95cf465de3d46d96881a722f94a337584ce48f280c4a52b819586563a  interfaces
9340e30b6c95f66cb2cdc68c0c5d765e4ce879d2f2bfb042c4b45996cf2b5c542b3762c6abfd213b4b9610f290d6ca734c28c7240fea76fb5cf58253570d2e8f  setup-cloud-init
748b828de1f21cc30c9c13c4ebfbec5ba542ed882ddd04906661ffd7e50ef3d575f67d5650e99aac01fb8c84a9dc84cc73d2c8f232f0d4cfe86136f3097676cf  README.Alpine
"
